package br.ufrpe.bsi.pvs.xml;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URL;

import org.jdom2.Document;
import org.jdom2.output.XMLOutputter;

/**
 * essa eh uma classe abstrata que une o codigo em comum a todos os 
 * interpretadores (parsers) xml do sistema. nessa classe é definido
 * o workflow (fluxo) de processamente de interpretacao do xml:
 * 
 * 1 - chama process(document) que vai chamar o processador correto
 * definido na subclasse para tratar do documento
 * 
 * 2 - limpa o arquivo (eraseXMLFile() ) especificado na subclasse para que novas
 * interpretacoes possam ser feitas
 *
 */
public abstract class ParserXML {

	public abstract void process(Document doc);

	public abstract URL getXMLFile();

	public void parse(final Document doc) {
		// process
		new Thread(new Runnable() {
			@Override
			public void run() {
				process(doc);
			}
		}).start();

		// erase
		eraseXMLFile();
	}

	public void eraseXMLFile() {
		URL url = getXMLFile();
		try (OutputStream out = new BufferedOutputStream(new FileOutputStream(
				new File(url.toURI())))) {
			XMLOutputter xout = new XMLOutputter();
			xout.output(XMLUtil.getNullRequestDocument(), out);
		} catch (Exception e) {
			System.err.println("[XML ERASE ERROR] cant erase response.xml: "
					+ e);
		}
	}

}
